package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

//http服务端
//1、写个get接口
//2、写个post接口

//w http.ResponseWriter 专门用于处理相应内容
//r *http.Request 专门用于获取请求内容
//流程：1获取和解析请求参数（r）	2处理业务逻辑	3响应内容（w）
//get方法：http://127.0.0.1:8080/req/get?name=root
func dealgGetReq(w http.ResponseWriter, r *http.Request)  {
	//获取请求参数
	query := r.URL.Query()
	if len(query["name"]) != 0 {
		name := query["name"][0]
		fmt.Println("通过字典下标获取：", name)
	}
	name2 := query.Get("name")
	fmt.Println("通过get方法获取：", name2)

	//响应结果
	w.WriteHeader(http.StatusOK)
	w.Write([]byte(fmt.Sprintf("这里是响应的内容：%s", name2)))
}

type Data struct {
	Name string
}

func dealPostReq(w http.ResponseWriter, r *http.Request)  {
	if r.Method != "POST" {
		w.WriteHeader(http.StatusBadRequest)
		return
	}
	//获取请求参数
	bodyBytes, err := ioutil.ReadAll(r.Body)
	if err != nil {
		panic(err)
	}
	fmt.Println(string(bodyBytes))
	var d = &Data{}
	json.Unmarshal(bodyBytes, d)
	//第一种方式
	//w.WriteHeader(http.StatusOK)
	//w.Write([]byte(fmt.Sprintf("这里是响应的内容：%s", d.Name)))
	//第二种方式
	json.NewEncoder(w).Encode(fmt.Sprintf("收到名字：%s", d.Name))
}

func main() {
	//用http包起一个server端
	//注册路由
	http.HandleFunc("/req/get", dealgGetReq)
	http.HandleFunc("/req/post", dealPostReq)
	//启动server端
	err := http.ListenAndServe(":8080", nil)
	if err != nil {
		panic(err)
	}
}
